1. Field of the Invention
The present invention relates to error detection and correction systems employing a first code for detection and correction of errors, and a second code for detecting errors by which the presence of uncorrectable errors is determined.
2. Description of Related Art
A standard encoding specification for 51/4 inch optical storage devices, known as the X3B11 standard, has been adopted by the data storage systems industry. According to this standard, data is stored in sectors which consist of three or more interleaves of data. A data field error checking and correcting (ECC) code is generated over each interleave and a data field cyclic redundancy code (CRC) is generated over the XOR sum of data bytes across the interleaves, i.e. to the XOR sum of all data bytes with the same displacement from the beginning of each interleave.
The ECC code is utilized to locate and correct correctable errors in each sector. The CRC code is utilized to determine whether there exist errors in the sector, which may not have been identified and corrected using the ECC code. When uncorrectable errors are detected, then an uncorrectable sector signal is generated.
Although this X3B11 specification has been implemented for optical disk systems, it is particularly useful for any data storage system characterized by frequent burst errors.
Performance of data storage systems using the ECC/CRC codes for identifying uncorrectable errors is limited by the time required to compare the errors located and corrected by the ECC with those detected by the CRC code. A typical system using the X3B11 standard is required first to read the data of a sector, and then to generate a syndrome based on the ECC code. From the syndrome, error location and error value polynomials are generated and the data is corrected. The corrected data is then read for generation of a CRC syndrome. If the generation of the CRC syndrome based on the corrected data is non-zero, then an uncorrectable error is detected. This algorithm is obviously burdensome in that it requires reading of the entire sector of data twice.
It would be desirable to utilize the two code error checking and correcting systems, such as the X3B11 standard, without requiring two reads of the sector of data involved in the correction, and otherwise improve the performance of error detection and correction systems.